import { login, logout, getInfo } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'

const roleMap = {
  1: 'admin',
  2: ''
}
const state = {
  token: getToken(),
  name: '',
  avatar: '',
}

const mutations = {
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_NAME: (state, name) => {
    state.name = name
  },
  SET_AVATAR: (state, avatar) => {
    state.avatar = avatar
  },
  SET_ROLES: (state, roles) => {
    state.roles = roles
  },
  SET_ROUTER: (state, router) => {
    state.router = router
  }
}

const actions = {
  // user login （用户登录）
  login({ commit }, userInfo) {
    const { username, password } = userInfo
    return new Promise((resolve, reject) => {
      login({ user_name: username.trim(), pass_word: password }).then(response => {
        // 然后 在这里拿到后台返回的token，
        const { data } = response   // 这是es6 语法，
        commit('SET_TOKEN', data.token)  //存一下
        setToken(data.token) //存一下

        //粗暴的解决办法，让登陆接口返回token同时返回角色，开始是没这个问题的
        commit('SET_ROLES', ['admin'])
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },

  // get user info （获取用户信息）
  getInfo({ commit, state }) {
    return new Promise((resolve, reject) => {
      getInfo().then(response => {
        const { data } = response
        if (!data) {
          reject('当前账号在其他终端登录！')//(验证失败，请重新登录)
        }
        const { roleId, userName } = data  // es6
        // roles must be a non-empty array(角色必须是非空数组)
        if (!roleId) {
          reject('getInfo: roles must be a non-null array!')
        }

        data.roles = [roleMap[roleId]]
        commit('SET_ROLES', data.roles)
        // 如果 每个账号都是单角色，就这样
        commit('SET_NAME', userName)
        commit('SET_AVATAR', 'avatar')
        commit('SET_ROUTER', {
          analysis: [
            {
              title: '生产数据分析', icon: 'sc', list: [
                { url: 'slsj', title: '水量数据分析报表', click: true },
                { url: 'hdfx', title: '能耗分析报表', click: true },
                { url: 'ssh', title: '水损耗分析报表', click: true },
                { url: 'szfx', title: '水质分析' },
                { url: 'jhsl', title: '计划水量完成率分析' }]
            },
            {
              title: '营销数据分析', icon: 'yx', list: [
                { url: 'sszl', title: '售水总量趋势分析', click: true },
                { url: 'khfb', title: '按用水类型分的客户分布', click: true },
                { url: 'sslb', title: '售水类别分析', click: true },
                { url: 'sblx', title: '水表类型及口径分析' },
                { url: 'zhfx', title: '用户数及售水总量综合分析' }]
            },
            {
              title: '设备运行分析', icon: 'sb', list: [
                { url: 'gzyc', title: '故障异常分析', click: true },
                { url: 'zdsb', title: '重点设备运营分析' }
              ]
            },
            {
              title: '管网指标分析', icon: 'gw', list: [
                { url: '', title: '产销差率' },
                { url: 'yslx', title: '用水类型分析' },
                { url: 'fqgx', title: '分区供销水量分析' }
              ]
            },
            {
              title: '工程数据分析', icon: 'gc', list: [
                { url: 'gcsl', title: '工程数量统计', click: true }
              ]
            },
            {
              title: '财务数据分析', icon: 'cw', list: [
                { url: 'cwsj', title: '财务支出汇总', click: true },
                { url: 'qtcj', title: '其他常见财务报表' }
              ]
            },
            {
              title: '客服数据分析', icon: 'kh', list: [
                { url: 'hjcs', title: '呼叫次数基本分析' },
                { url: 'khfw', title: '客户服务分类分析' },
                { url: 'hjly', title: '呼叫来源分析' },
                { url: 'myd', title: '满意度调查分析' }
              ]
            }],
          decision: [
            {
              title: '库区气候影响预测分析',
              introduce: '历史气候数据与库区水位水质数据交叉分析验证，构建模型预测气候条件对水库的影响；', icon: 'sc', list: []
            },
            {
              title: '基于需水量的供水量产能优化模型',
              introduce: '基于历史需水量、供水量数据，结合分支界限函数的供水调度优化计算并寻找供给缺口与产能过剩的情况，提升供水产量准确度及调度效率。', icon: 'sc', list: []
            },
            {
              title: '水量及用水模式预测',
              introduce: '基于历史水量数据、天气、温度、节假日等因子训练各种预测模型，用来预测未来水量；', icon: 'sc', list: []
            },
            {
              title: '工程预算分析',
              introduce: '根据历年工程预算的工程种类、数量、结构，及其预算覆盖程度，分析工程年度预算合理性\n' +
                '      ，及具体单个项目的预算建议。并对次年资金拨付指标提供建议；', icon: 'sc', list: []
            },
            {
              title: '用户数与售水总量综合分析', introduce: '跟踪监控全时、全市的自来水用户及相关售水信息，用以提前预测水务集团年售水收入变化.', icon: 'sc', list: []
            },
          ],
          dataSharing: [
            {
              title: '数据检索', url: 'retrieval', icon: 'sc', list: [
                { url: 'classification', title: '分类检索', click: true },
                { url: 'keyword', title: '关键字检索' },
                { url: 'mapRetrieval', title: '地图检索' },
                { url: 'characteristic', title: '特色数据集' },
              ]
            },

            {
              title: '数据下载', url: 'downloading', icon: 'yx', list: [
                {
                  url: 'archives', title: '档案数据', click: true, children: [
                    { title: '水务基础档案', url: 'basicArchives' },
                    { title: '水厂基础档案', url: '' },
                    { title: '加压泵基础档案', url: '' },
                    { title: '设施档案', url: '' },
                    { title: '用户档案', url: '' },
                    { title: '水表档案', url: '' },
                    { title: '声像档案', url: '' },
                  ]
                },
                { url: 'monitor', title: '监测数据' },
                { url: 'special', title: '专题数据' }
              ]
            },

            {
              title: '数据接口', url: 'interface', icon: 'yx', list: [
                {
                  url: 'measuredData', title: '实测数据接口', click: true, children: [
                    { title: '水务基础档案', url: 'measuredData' },
                  ]
                },
              ]
            },
            {
              title: '数据资源', url: 'resources', icon: 'yx', list: [
                {
                  url: 'archives', title: '档案数据', click: true, children: [
                    { title: '水务基础档案', url: 'basicArchives' },
                    { title: '水厂基础档案', url: '' },
                    { title: '加压泵基础档案', url: '' },
                    { title: '设施档案', url: '' },
                    { title: '用户档案', url: '' },
                    { title: '水表档案', url: '' },
                    { title: '声像档案', url: '' },
                  ]
                },
                { url: 'monitor', title: '监测数据' },
                { url: 'special', title: '专题数据' }
              ]
            },
            {
              title: '关于平台', url: 'about', icon: 'yx', list: [
                { url: 'briefIntroduction', title: '基础服务中心简介', click: true },
                { url: 'sharePlatform', title: '平台管理暂行办法' },
                { url: 'application', title: '离线水务资料使用申请' },
                { url: 'detailedList', title: '平台已加载数据目录清单' },
                { url: 'contactUs', title: '联系我们' },
              ]
            },
          ]
        })
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },

  // user logout
  logout({ commit, state }) {
    return new Promise((resolve, reject) => {
      logout(state.token).then(() => {
        commit('SET_TOKEN', '')
        commit('SET_ROLES', [])
        removeToken()
        resetRouter()
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },

  // remove token
  resetToken({ commit }) {
    return new Promise(resolve => {
      commit('SET_TOKEN', '')
      commit('SET_ROLES', [])
      removeToken()
      resolve()
    })
  },
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
